import 'package:shared_preferences/shared_preferences.dart';

class TokenManager {
  //私有属性
  String? _token;
  final _key = 'enjoy-plus-key';

  // 创建一个全局单例对象
  /*
   * 1. 使用 _instance 变量来存储类的唯一实例
   * 2. 通过私有构造函数 TokenManager._internal() 确保外部不能直接创建实例
   * 3. factory TokenManager() 工厂方法用于检查 _instance 是否已初始化
   *    若未初始化则创建实例并赋值，最后返回 _instance!
   */

  //私有实例对象
  static TokenManager? _instance;
  //自定义构造函数  -  返回一个TokenManger类的实例对象
  TokenManager._internal();

  //默认的构造函数 - 可以省略不写
  //执行时机 ， 外部构造实例 - 自动执行
  factory TokenManager() {
    _instance ??= TokenManager._internal();
    return _instance!;
  }
  //获取token
  Future init() async {
    // 获取数据仓库的实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    // 读取token并赋值
    _token = prefs.getString(_key);
  }

  //存储token
  Future setToken(String token) async {
    _token = token;
    // 获取数据仓库的实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString(_key, token);
  }

  //同步获取token
  String? getToken() {
    return _token;
  }

//删除token
  Future removeToken() async {
    _token = null;
    // 获取数据仓库的实例
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.remove(_key);
  }
}
